package com.zm.tools.validate;

/**
 * Description: 验证接口，子类实现validateBusiness() 与 validateEmpty()之后
 *   直接调用validate()方法即可
 * Created by zoum on 2018/6/6 13:42
 */
public interface ParamValidate<T> {

     /**
      * 先执行空验证，再执行业务验证
      * @param o 业务参数
      * @return
      */
     default ValidateResult validate(T o) {
          ValidateResult validateResult = validateEmpty(o);
          if (validateResult.noPass()){
               return validateResult;
          }

          validateResult = validateBusiness(o);
          if (validateResult.noPass()){
               return validateResult;
          }
          return validateResult;
     }

     /**
      * 业务验证（子类实现）
      * @param o
      * @return
      */
     ValidateResult validateBusiness(T o);

     /**
      * 业务验证（子类实现）
      * @param o
      * @return
      */
     ValidateResult validateEmpty(T o);
}
